package com.zhunaer.entity;

import java.util.Date;
import java.math.BigDecimal;

/**
 * 订单类，用于表示一个订单的相关信息
 */
public class Order {
    /**
     * 订单唯一标识，用于在系统中唯一识别一个订单
     */
    private Integer orderId;
    /**
     * 关联用户ID，用于标识该订单是由哪个用户创建的
     */
    private Integer userId;
    /**
     * 关联房型ID，用于标识该订单所预订的房型
     */
    private Integer roomId;
    /**
     * 房间单价，使用BigDecimal类型以避免浮点数计算精度问题
     */
    private BigDecimal amount;
    /**
     * 房间数量，记录该订单预订的房间数量
     */
    private int quantity;
    /**
     * 订单总金额（单位：元），使用BigDecimal类型以避免浮点数计算精度问题
     */
    private BigDecimal totalAmount;
    /**
     * 订单状态（新建/已支付/已取消），用于表示订单当前所处的状态
     */
    private String status;
    /**
     * 订单创建时间，记录订单创建的具体时间
     */
    private Date orderTime;
    /**
     * 入住时间，记录订单对应的入住时间
     */
    private Date checkInTime;
    /**
     * 取消时间，记录订单被取消的具体时间
     */
    private Date cancelTime;

    // Getters and Setters

    /**
     * 获取订单唯一标识
     * @return 订单唯一标识
     */
    public Integer getOrderId() {
        return orderId;
    }

    /**
     * 设置订单唯一标识
     * @param orderId 订单唯一标识
     */
    public void setOrderId(Integer orderId) {
        this.orderId = orderId;
    }

    /**
     * 获取关联用户ID
     * @return 关联用户ID
     */
    public Integer getUserId() {
        return userId;
    }

    /**
     * 设置关联用户ID
     * @param userId 关联用户ID
     */
    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    /**
     * 获取关联房型ID
     * @return 关联房型ID
     */
    public Integer getRoomId() {
        return roomId;
    }

    /**
     * 获取房间单价
     * @return 房间单价
     */
    public BigDecimal getAmount() {
        return amount;
    }

    /**
     * 设置房间单价
     * @param amount 房间单价
     */
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    /**
     * 设置关联房型ID
     * @param roomId 关联房型ID
     */
    public void setRoomId(Integer roomId) {
        this.roomId = roomId;
    }

    /**
     * 设置房间数量
     * @param quantity 房间数量
     */
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    /**
     * 设置订单总金额
     * @param totalAmount 订单总金额
     */
    public void setTotalAmount(BigDecimal totalAmount) {
        this.totalAmount = totalAmount;
    }

    /**
     * 获取订单状态
     * @return 订单状态
     */
    public String getStatus() {
        return status;
    }

    /**
     * 设置订单状态
     * @param status 订单状态
     */
    public void setStatus(String status) {
        this.status = status;
    }

    /**
     * 获取订单创建时间
     * @return 订单创建时间
     */
    public Date getOrderTime() {
        return orderTime;
    }

    /**
     * 设置订单创建时间
     * @param orderTime 订单创建时间
     */
    public void setOrderTime(Date orderTime) {
        this.orderTime = orderTime;
    }

    /**
     * 获取入住时间
     * @return 入住时间
     */
    public Date getCheckInTime() {
        return checkInTime;
    }

    /**
     * 设置入住时间
     * @param checkInTime 入住时间
     */
    public void setCheckInTime(Date checkInTime) {
        this.checkInTime = checkInTime;
    }

    /**
     * 获取订单取消时间
     * @return 订单取消时间
     */
    public Date getCancelTime() {
        return cancelTime;
    }

    /**
     * 设置订单取消时间
     * @param cancelTime 订单取消时间
     */
    public void setCancelTime(Date cancelTime) {
        this.cancelTime = cancelTime;
    }

    /**
     * 重写toString方法，方便打印订单信息
     * @return 包含订单信息的字符串
     */
    @Override
    public String toString() {
        return "Order{" +
                "orderId=" + orderId +
                ", userId=" + userId +
                ", roomId=" + roomId +
                ", amount=" + this.amount +
                ", status='" + status + '\'' +
                ", orderTime=" + orderTime +
                ", checkInTime=" + checkInTime +
                ", cancelTime=" + cancelTime +
                '}';
    }
}